(1) Field of Use
The present disclosure describes systems and methods relating to packed command management for non-volatile storage devices.
(2) Description of Related Art
Computing apparatus often include embedded systems to control the operation of the underlying devices and to provide enhanced functionality and operational flexibility. Non-volatile memory can be included as a portion of the embedded system to store operating system program code, issued commands and data for operating the embedded system. Some embedded systems use solid state memory as non-volatile memory (e.g., electrically Erasable Read Only Memory (EEPROM)). Solid state memory may be used to accelerate applications to increase data access time, and may be advantageously programmed or re-programmed to provide non-volatile storage of information. Various standards have been defined for such non-volatile solid state memory devices, often referred to as flash memory. For example, MultiMediaCard (MMC) is a memory card standard that is based on a NAND-based flash memory. Further, the eMMC architecture puts MMC components (flash memory plus controller) into a small ball grid array (BGA) package for use in circuit boards as an embedded non-volatile memory system.
Due to historical reasons, eMMC does not support command queuing. To process a command, from the host to the device, each command goes through the following stages (taking a read command as an example): 1) the host prepares a command; 2) the host sends the command to the device; 3) the device receives the command; 4) the device processes the command and prepares the data; and 5) the device sends data to the host. Each stage takes time. The total time determines the IOPS (Input/Output Per Second). If command queuing were supported, the host could prepare and send more commands to the device when the device is handling a prior command so that part of the time consumed could be overlapped and overall IOPS could be improved.
To improve eMMC performance, starting from eMMC 4.5, the packed command was introduced. The packed command enables the host to send more than one command to the device. To achieve this, eMMC uses a solution different than typical command queuing. The eMMC packed command protocol is actually still single command based, but it uses multiple command phases. For example, if the host needs to send 10 read commands to the device, it does the following: 1) the host prepares a table in host memory, where this table includes information of the 10 commands; 2) the host prepares a WRITE command that is used to send the command table to the device; 3) the host sends the WRITE command to the device; 4) the host sends the data (a.k.a. the table) of the WRITE command to the device; 5) the device receives the WRITE command and the data, and the device interprets the command and data and knows it has 10 READ commands to process; 6) the host sends a READ command to the device; 7) the device receives the READ command, and the device can start to send data; 8) the device processes the 10 read commands received previously in the table; 9) the device sends data of the 10 read commands to the host (the data of the 10 commands must be strictly in order); and 10) the host completes all the 10 read commands once all data is received from the device. This packed command protocol can thus reduce the time for transferring commands from host to device and improve overall IOPS.